import os
import sys
import shutil
import os
from pathlib import Path

print("===== 上证指数指示器打包工具 =====")

# 检查是否安装了pyinstaller
try:
    import PyInstaller
    print("PyInstaller已安装，可以开始打包...")
except ImportError:
    print("正在安装PyInstaller...")
    os.system(f"{sys.executable} -m pip install pyinstaller")
    print("PyInstaller安装完成！")

# 创建临时目录用于打包
temp_dir = Path('temp_build')
if temp_dir.exists():
    shutil.rmtree(temp_dir)
temp_dir.mkdir(exist_ok=True)

try:
    # 检查是否存在SVG图标文件
    svg_icon_path = Path('stock_icon.svg')
    icon_arg = f"--add-data={svg_icon_path};." if svg_icon_path.exists() else ""
    
    # 安装必要的依赖
    print("正在安装必要的依赖...")
    os.system(f"{sys.executable} -m pip install -r requirements.txt")
    
    # 使用pyinstaller打包应用程序
    cmd = [
        f"{sys.executable}",
        "-m", "PyInstaller",
        "--onefile",  # 生成单个可执行文件
        "--windowed",  # 无控制台窗口
        "--icon", "NONE",  # 无图标
        "--name", "StockIndicator",  # 生成的可执行文件名称
    ]
    
    # 添加SVG图标文件作为数据文件
    if svg_icon_path.exists():
        cmd.append(f"--add-data={svg_icon_path};.")
    
    # 添加主程序文件
    cmd.append("stock_indicator.py")
    
    # 执行打包命令
    print(f"执行打包命令: {' '.join(cmd)}")
    os.system(' '.join(cmd))
    
    # 移动生成的可执行文件到当前目录
    dist_dir = Path('dist')
    if dist_dir.exists() and (dist_dir / 'StockIndicator.exe').exists():
        if Path('StockIndicator.exe').exists():
            Path('StockIndicator.exe').unlink()
        shutil.move(str(dist_dir / 'StockIndicator.exe'), '.')
        print("\n打包完成！可执行文件已生成：StockIndicator.exe")
        
        # 清理临时文件
        print("正在清理临时文件...")
        if Path('build').exists():
            shutil.rmtree('build')
        if Path('dist').exists():
            shutil.rmtree('dist')
        if Path('StockIndicator.spec').exists():
            Path('StockIndicator.spec').unlink()
        print("清理完成！")
    else:
        print("打包失败：未找到生成的可执行文件。")
except Exception as e:
    print(f"打包过程中发生错误：{e}")
finally:
    # 清理临时目录
    if temp_dir.exists():
        shutil.rmtree(temp_dir)
    
    input("按回车键退出...")